#include <cstdio>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <fcntl.h>
#include <string>
#include <unistd.h>
#include <iostream>
#include <signal.h>
using namespace std;

int main()
{
	
    return 0;
}

//int main()
//{
//    signal(2,SIG_IGN);
//    signal(2,SIG_DFL);
//    
//    while(true)
//    {
//        cout << "My pid is " << getpid() << endl;
//        sleep(1);
//    }
//
//    return 0;
//}
//
// int main()
// {
//     while(true)
//     {
//         std::cout << "Hello Linux" << std::endl;
//     }

//     return 0;
// }


// const char *pathname = "/home/lazy/linux/lower_code/shm";
// const int proj_id = 0x11;
// std::string ToHex(key_t key)
// {
//     char buffer[128];
//     snprintf(buffer, sizeof(buffer), "0x%x", key);
//     return buffer;
// }

// int main()
// {
//     key_t key = ftok(pathname, proj_id);
//     int shmid = shmget(key, 4096, IPC_CREAT | IPC_EXCL);
//     std::cout << "key: " << ToHex(key) << " shmid: " << shmid << std::endl;
//     return 0;
// }

// int main()
// {
//     pid_t id = fork();

//     if(id == 0)
//     {
//         //子进程准备work...

//     }
//     //父进程准备work...

//     return 0;
// }

// int main()
// {
//     fprintf(stdout,"Hello Linux! I am stdout\n");
//     fprintf(stderr,"Hello Linux! I am stderr\n");
//     fprintf(stderr,"Hello Linux! I am stderr\n");
//     fprintf(stdout,"Hello Linux! I am stderr\n");
//     fprintf(stdout,"Hello Linux! I am stderr\n");
//     fprintf(stderr,"Hello Linux! I am stderr\n");
//     fprintf(stderr,"Hello Linux! I am stderr\n");
//     fprintf(stdout,"Hello Linux! I am stderr\n");
//     fprintf(stderr,"Hello Linux! I am stderr\n");

//     return 0;
// }

// #define LINE_SIZE 1024
// #define FLUSH_NOW  1
// #define FLUSH_LINE 2
// #define FLUSH_FULL 4
// #define FILE_NAME "log.txt"

// struct _myFILE
// {
//     unsigned int flags;
//     int fileno;
//     // 缓冲区
//     char cache[LINE_SIZE];
//     int cap;
//     int pos; // 下次写入的位置
// };

// typedef struct  _myFILE myFILE;

// myFILE* my_fopen(const char *path, const char *flag);
// void my_fflush(myFILE *fp);
// ssize_t my_fwrite(myFILE *fp, const char *data, int len);
// void my_fclose(myFILE *fp);

// myFILE* my_fopen(const char *path, const char *flag)
// {
//     int flag1 = 0;
//     int iscreate = 0;
//     mode_t mode = 0666;
//     if(strcmp(flag, "r") == 0)
//     {
//         flag1 = (O_RDONLY);
//     }
//     else if(strcmp(flag, "w") == 0)
//     {
//         flag1 = (O_WRONLY | O_CREAT | O_TRUNC);
//         iscreate = 1;
//     }
//     else if(strcmp(flag, "a") == 0)
//     {
//         flag1 = (O_WRONLY | O_CREAT | O_APPEND);
//         iscreate = 1;
//     }
//     else
//     {}

//     int fd = 0;
//     if(iscreate)
//         fd = open(path, flag1, mode);
//     else
//         fd = open(path, flag1);

//     if(fd < 0) return NULL;

//     myFILE *fp = (myFILE*)malloc(sizeof(myFILE));
//     if(!fp) return NULL;

//     fp->fileno = fd;
//     fp->flags = FLUSH_LINE;

//     fp->cap = LINE_SIZE;
//     fp->pos = 0;

//     return fp;
// }

// void my_fflush(myFILE *fp)
// {
//     write(fp->fileno, fp->cache, fp->pos);
//     fp->pos = 0;
// }

// ssize_t my_fwrite(myFILE *fp, const char *data, int len)
// {
//     // 写入操作本质是拷贝, 如果条件允许，就刷新，否则不做刷新
//     memcpy(fp->cache+fp->pos, data, len); //肯定要考虑越界, 自动扩容
//     fp->pos += len;

//     if((fp->flags&FLUSH_LINE) && fp->cache[fp->pos-1] == '\n')
//     {
//         my_fflush(fp);
//     }

//     return len;
// }

// void my_fclose(myFILE *fp)
// {
//     my_fflush(fp);
//     close(fp->fileno);
//     free(fp);
// }

// int main()
// {
//     myFILE *fp = my_fopen(FILE_NAME, "w");
//     if(fp == NULL) return 1;

//     const char *str = "hello bit";
//     int cnt = 10;
//     char buffer[128];
//     while(cnt)
//     {
//         sprintf(buffer, "%s - %d", str, cnt);
//         my_fwrite(fp, buffer, strlen(buffer)); // strlen()+1不需要
//         cnt--;
//         sleep(1);
//         //my_fflush(fp);
//     }

//     my_fclose(fp);
//     return 0;
// }

// int main()
// {
//     FILE* fp = fopen("log.txt", "w");
//     if(fp == NULL)
//     {
//         perror("Fail file!\n");
//         return -1;
//     }
//     int cnt = 10;
//     const char* str = "Hello Linux!";
//     while(cnt)
//     {
//         //sprintf(buffer,"%s - %d", str, cnt);
//         fprintf(fp,str);
//         sleep(1);
//         cnt--;
//         //fflush(fp);
//     }

//     return 0;
// }

// int main()
// {
//     int fd = open("log.txt",O_WRONLY | O_CREAT | O_TRUNC, 0666);
//     if(fd < 0)
//     {
//         return -1;
//     }
//     const char* str = "Hello linux";
//     char buffer[128];
//     int cnt = 10;
//     while(cnt)
//     {
//         sprintf(buffer,"%s - %d\n",str,cnt);
//         write(fd,buffer,sizeof(str));
//         cnt--;
//         sleep(1);
//         fflush(stdout);
//     }
//     close(fd);
//     return 0;
// }

// int main()
// {
//     int fd = open("log.txt",O_WRONLY | O_CREAT | O_TRUNC,0666);
//     if(fd < 0)
//     {
//         perror("open fail!\n");
//     }
//     dup2(fd,1);
//     printf("Hello linux!\n");
//     fprintf(stdout,"Hello world!\n");

//     char* message = "Hello C++!\n";
//     write(1,message,strlen(message));
//     fork();
//     return 0;
// }

// int main()
// {
//     // close(0);
//     // close(2);
//     close(1);
//     int fd = open("log.txt",O_WRONLY | O_CREAT | O_APPEND, 0666);
//     printf("printf,fd:%d\n", fd);
//     fprintf(stdout,"fprintf,fd:%d\n",fd);
//     fflush(stdout);
//     close(fd);
//     return 0;
// }

// int main()
// {
// 	int n = 0;
// 	while (scanf("%d", &n) != 1)
// 	{
// 		fflush(stdin);
// 		//setbuf(stdin, NULL);
// 		printf( "Hello world!\n");
// 	}
// 	return 0;
// }

// int main()
// {
// 	double x = 0;
// 	scanf("%lf", &x);
// 	if (x == 0)
// 	{
// 		printf("0\n");
// 	}
// 	else
// 	{
// 		//printf("f(%.0f) = %.1lf\n", x, 1 / x);
// 		//printf("f(%d) = %.1lf\n", x, (double)1.0 / x);
// 		printf("f(%lf) = %d\n", 1.0 / x, x);
// 	}

// 	return 0;
// }

// int main()
// {
//     int fd = open("/dev/pts/5", O_WRONLY|O_APPEND);
//     if(fd < 0) return 1;
//     const char *message = "hahaha\n";
//     while(1)
//     {
//         write(fd, message, strlen(message));
//         sleep(1);
//     }

//     close(fd);
//     return 0;
// }

// int main()
// {
//     FILE* fp = fopen("log.txt","w");
//     printf("fp->%d\n",fp->_fileno);

//     printf("stdin->%d\n",stdin->_fileno);
//     printf("stdout->%d\n",stdout->_fileno);
//     printf("stderr->%d\n",stderr->_fileno);

//     return 0;
// }

// int main()
// {
//     umask(0);
//     int fd = open("test.txt",O_WRONLY | O_CREAT | O_TRUNC,0666);
//     if(fd < 0)
//     {
//         perror("open");
//         exit(-1);
//     }
//     return 0;
// }

// #define  ONE 1
// #define  TWO (1<<1)
// #define  THREE (1<<2)

// void Func(int a)
// {
//     if(a&&ONE)
//     printf("ONE\n");

//     if(a&&TWO)
//     printf("TWO\n");

//     if(a&&THREE)
//     printf("THREE\n");

// }

// int main()
// {
//     Func(ONE);
//     Func(ONE | THREE);
//     Func(ONE | TWO);
//     return 0;
// }

// int main()
// {
//     int fd = open("test.txt",O_WRONLY | O_CREAT);

//     if(fd < 0)
//     {
//         perror("open");
//         exit(-1);
//     }

//     return 0;
// }

// int main()
// {
//     FILE* fp = fopen("log.txt","w");
//     if(fp == NULL)
//     {
//         perror("fp");
//         exit(1);
//     }
//     fclose(fp);
//     return 0;
// }

// int main()
// {
//     printf("Hello world\n");
//     return 0;
// }
